package xyz.lwm.lazycat.aop.info;

import org.jetbrains.annotations.NotNull;
import xyz.lwm.lazycat.utility.reflect.Annotations;

/**
 * 类信息
 *
 * @author lwm
 */
public interface ClassInfo extends Iterable<MethodInfo> {

    /**
     * @return 类名、父类名、接口名及父类接口名
     */
    @NotNull String[] getNames();

    /**
     * @return 类、父类、接口上的注解名
     */
    @NotNull String[] getAnnotationNames();

    /**
     * @return 获取类类型
     */
    @NotNull Class<?> getType();

    /**
     * @return 获取类上的注解
     */
    @NotNull Annotations getAnnotations();

    /**
     * 创建类信息
     *
     * @param type 类类型
     * @return 类信息
     */
    @NotNull static ClassInfo of(@NotNull Class<?> type) {
        return new SimpleClassInfo(type);
    }

}
